/**
 * 工具类
 * @author 阮景涛
 */
import dayjs from 'dayjs'
import cryptoJs from "crypto-js";
import axios from 'axios'
import {saveAs} from 'file-saver'

export function localGet(key) {
    const value = window.localStorage.getItem(key)
    try {
        return JSON.parse(window.localStorage.getItem(key))
    } catch (error) {
        return value
    }
}

/**
 * 转换字节为对应单位
 * @param bytes
 * @returns {string}
 */
export function formatBytes(bytes) {
    if (bytes < 1024) {
        return bytes + ' B';
    } else if (bytes < 1048576) {
        return (bytes / 1024).toFixed(2) + ' KB';
    } else {
        return (bytes / 1048576).toFixed(2) + ' MB';
    }
}

/**
 * 下载文件方法
 * @param url 下载文件路径
 * @param fileName 保存文件的名称,如果不给就去响应头中content-disposition属性的文件名
 */
export function downloadFile(url, fileName) {
    return axios.get(url, {
        headers: {'Content-Type': 'application/octet-stream'},
        responseType: 'blob'
    }).then((res) => {
        const data = res.data
        // 如果没有给fileName参数
        if (!fileName) {
            let resFileName = res.headers['content-disposition']
            if (resFileName && (resFileName = resFileName.match(/filename=\"([^\"]*)\"/))) {
                fileName = resFileName[1];
            }
        }
        console.log('保存文件名', fileName)
        const blob = new Blob([data])
        saveAs(blob, fileName)
    })
}

/**
 * 使用des加密
 * @param data 需要加密的数据
 * @param cryptedKey 加密密钥
 * @returns {*} 返回加密后结果
 */
export function encrypt(data, cryptedKey = 'kyland.com') {
    return cryptoJs.TripleDES.encrypt(data + '\n', cryptedKey).toString()
}

/**
 * 判断当前权限是否需要禁用,为只读就禁用表单，返回true，其他返回false
 */
export function permissionDisabled() {
    const level = localGet('token')?.level || 0
    return level === 1
}

/**
 * 使用des解密
 * @param data 需要解密数据
 * @param cryptedKey 加密密钥
 * @returns {*} 解密之后结果
 */
export function decrypt(data, cryptedKey = 'kyland.com') {
    return cryptoJs.TripleDES.decrypt(data, cryptedKey).toString(cryptoJs.enc.Utf8).trim()
}

/**
 * 验证IP的正则验证方法，加载rulse的validator属性中
 * @param rule
 * @param value
 * @param callback
 */
export function validateIP(rule, value, callback) {
    if (value === '') {
        callback(new Error('Please enter IP address'));
    } else if (/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(value)) {
        const parts = value.split('.');
        if (parts[0] > 255 || parts[1] > 255 || parts[2] > 255 || parts[3] > 255) {
            callback(new Error('Please enter a valid IP address'));
        } else {
            callback();
        }
    } else {
        callback(new Error('Please enter a valid IP address'));
    }
}

/**
 * @description 格式化时间
 * @param date
 * @param format 转换的格式
 */
export function dateFormat(date, format = 'YYYY-MM-DD HH:mm:ss') {
    if (!date) {
        return null
    }
    return dayjs(date).format(format)
}

export function localSet(key, value) {
    window.localStorage.setItem(key, JSON.stringify(value))
}

export function localRemove(key) {
    window.localStorage.removeItem(key)
}